//
// Created by 紫霄 on 2020/4/20.
//

#ifndef LEETCODE_39_H
#define LEETCODE_39_H
/*
 * 数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
你可以假设数组是非空的，并且给定的数组总是存在多数元素。
示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
#include <vector>
using namespace std;
// 减而制之，也叫摩尔投票法；
class Solution {
public:
  int majorityElement(vector<int> &nums) {
    int size = nums.size();
    int cur = nums[0];
    int cnt = 1;
    if (size == 1) {
      return cur;
    } else {
      for (int i = 1; i < size; ++i) {
        if (cnt == 0) {
          cur = nums[i];
          ++cnt;
        } else {
          cur == nums[i] ? ++cnt : --cnt;
        }
      }
    }
    return cur;
  }
};
#endif // LEETCODE_39_H
